#include "Timer.h"  

//===================================================函数===================================================
/*---------------------------------------------------------------
 【函    数】(1)Time1_InternalClock_Up_init
 【功    能】定时器2采用内部时钟向上计数初始化
 【参    数】1.ARR自动重装值
			 2.PSC分频
 【返 回 值】无
 【注意事项】需要启动定时器TIM_Cmd(TIM1,ENABLE);
 ----------------------------------------------------------------*/
void Time1_InternalClock_Up_init(uint16_t arr,uint16_t psc)
{
	
	//使能定时器1的时钟
	RCC_APB2PeriphClockCmd(RCC_APB2Periph_TIM1,ENABLE);
	//选择内部时钟为TIM2时基单元的时钟源
	TIM_InternalClockConfig(TIM1);
	//配置时基单元
	//初始化定时器2时基单元的结构体
	TIM_TimeBaseInitTypeDef TIM_TIM1_InitStructure;
	/*
	TIM_ClockDivision 是这个结构体中的一个字段，用于设置定时器的时钟分频。
	具体来说，它决定了定时器时钟（TIMxCLK）的频率与内部时钟（CK_INT）之间的关系。
	TIM_CKD_DIV1 表示不进行分频，即 CK_INT = TIMxCLK。
	换句话说，定时器的内部时钟频率与输入的定时器时钟频率相同。
	*/
	TIM_TIM1_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	//计数器模式：选择向上计数模式
	TIM_TIM1_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	//ARR自动重装器的值
	TIM_TIM1_InitStructure.TIM_Period = arr - 1;
	//PSC预分频器的值
	TIM_TIM1_InitStructure.TIM_Prescaler = psc - 1;
	//重复计数器的值，高级计数器才有
	TIM_TIM1_InitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM1,&TIM_TIM1_InitStructure);


}
/*---------------------------------------------------------------
 【函    数】(2)Time2_InternalClock_Up_init
 【功    能】定时器2采用内部时钟向上计数初始化
 【参    数】1.ARR自动重装值
			 2.PSC分频
 【返 回 值】无
 【注意事项】需要启动定时器TIM_Cmd(TIM2,ENABLE);
 ----------------------------------------------------------------*/
void Time2_InternalClock_Up_init(uint16_t arr,uint16_t psc)
{
	
	//使能定时器2的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM2,ENABLE);
	//选择内部时钟为TIM2时基单元的时钟源
	TIM_InternalClockConfig(TIM2);
	//配置时基单元
	//初始化定时器2时基单元的结构体
	TIM_TimeBaseInitTypeDef TIM_TIM2_InitStructure;
	/*
	TIM_ClockDivision 是这个结构体中的一个字段，用于设置定时器的时钟分频。
	具体来说，它决定了定时器时钟（TIMxCLK）的频率与内部时钟（CK_INT）之间的关系。
	TIM_CKD_DIV1 表示不进行分频，即 CK_INT = TIMxCLK。
	换句话说，定时器的内部时钟频率与输入的定时器时钟频率相同。
	*/
	TIM_TIM2_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	//计数器模式：选择向上计数模式
	TIM_TIM2_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	//ARR自动重装器的值
	TIM_TIM2_InitStructure.TIM_Period = arr - 1;
	//PSC预分频器的值
	TIM_TIM2_InitStructure.TIM_Prescaler = psc - 1;
	//重复计数器的值，高级计数器才有
	TIM_TIM2_InitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM2,&TIM_TIM2_InitStructure);


}
/*---------------------------------------------------------------
 【函    数】(3)Time3_InternalClock_Up_init
 【功    能】定时器2采用内部时钟向上计数初始化
 【参    数】1.ARR自动重装值
			 2.PSC分频
 【返 回 值】无
 【注意事项】需要启动定时器TIM_Cmd(TIM1,ENABLE);
 ----------------------------------------------------------------*/
void Time3_InternalClock_Up_init(uint16_t arr,uint16_t psc)
{
	
	//使能定时器3的时钟
	RCC_APB1PeriphClockCmd(RCC_APB1Periph_TIM3,ENABLE);
	//选择内部时钟为TIM3时基单元的时钟源
	TIM_InternalClockConfig(TIM3);
	//配置时基单元
	//初始化定时器3时基单元的结构体
	TIM_TimeBaseInitTypeDef TIM_TIM3_InitStructure;
	/*
	TIM_ClockDivision 是这个结构体中的一个字段，用于设置定时器的时钟分频。
	具体来说，它决定了定时器时钟（TIMxCLK）的频率与内部时钟（CK_INT）之间的关系。
	TIM_CKD_DIV1 表示不进行分频，即 CK_INT = TIMxCLK。
	换句话说，定时器的内部时钟频率与输入的定时器时钟频率相同。
	*/
	TIM_TIM3_InitStructure.TIM_ClockDivision = TIM_CKD_DIV1;
	//计数器模式：选择向上计数模式
	TIM_TIM3_InitStructure.TIM_CounterMode = TIM_CounterMode_Up;
	//ARR自动重装器的值
	TIM_TIM3_InitStructure.TIM_Period = arr - 1;
	//PSC预分频器的值
	TIM_TIM3_InitStructure.TIM_Prescaler = psc - 1;
	//重复计数器的值，高级计数器才有
	TIM_TIM3_InitStructure.TIM_RepetitionCounter = 0;
	TIM_TimeBaseInit(TIM3,&TIM_TIM3_InitStructure);


}
